package la.bbs558.util;

import cn.hutool.core.map.MapBuilder;
import cn.hutool.core.util.PhoneUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import la.bbs558.exception.MsgException;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * @author: Shanks
 * @date: 2024/1/26 10:10
 * @desc:
 */
@Slf4j
public class JuheSendUtil {

    public enum SendTemplate{
        //注册验证码、找回密码验证码
        REGISTER("260309"),
        //找回密码验证码
//        FIND_PASSWORD("260310"),
        ;
        private final String id;

        SendTemplate(String id) {
            this.id = id;
        }
    }

    private static final String SEND_URL = "http://v.juhe.cn/sms/send";
    private static final String API_KEY = "618978cf6a2e10df66a2eec6fefc31fe";

    public static void send(SendTemplate sendTemplate,String mobile, String code) {
        if(Objs.isInvalid(mobile) || !PhoneUtil.isMobile(mobile = mobile.trim())){
            throw new MsgException("输入的手机号码格式不正确");
        }
        //发送短信
        // 	mobile	    是	    string	接收短信的手机号码
        // 	tpl_id	    是	    int	    短信模板ID，请参考个人中心短信模板设 短信模板需要通过审核后，才能发送
        // 	vars	    二选一	string	模板变量键值对的json类型字符串，例：模板中含有#code#和#name两个变量，则vars={"name":"张三","code":1234},建议用户使用post方式提交，Content-Type：application/x-www-form-urlencoded
        // 	tpl_value	二选一	string	变量名和变量值对，如：#code#=431515，整串值需要urlencode，得到结果为：%23code%23%3d431515。如果你的变量名或者变量值中带有#&=+中的任意一个特殊符号，请先分别进行utf-8 urlencode编码后再传递，请用户务必测试变量被替换成功后再部署到生产环境，以免发送错误内容造成损失详细说明>
        // 	key	        是	    string	在个人中心->我的数据,接口名称上方查看
        // 	ext	        否	    string	扩展码，9位以内的数字，具体模板支持的长度可以提前咨询客服
        // 	dtype	    否	    string	返回数据的格式,xml或json，默认json
        String result = null;
        String url = SEND_URL;//请求接口地址
        String vars = JSON.toJSONString(MapBuilder.create().put("code", code).build());
        Map<String, Object> params = new HashMap<>();
        params.put("mobile", mobile);
        params.put("tpl_id", sendTemplate.id);
        params.put("vars", vars);
        params.put("key", API_KEY);
        try {
            result = HttpUtil.get(url, params, 5000);
            JSONObject object = JSONObject.parseObject(result);
            Integer errorCode = object.getInteger("error_code");
            if (Objects.equals(errorCode, 0)) {
                log.info("发送短信成功={}",object.get("result"));
            } else {
                log.info("发送短信失败：{}", object.get("error_code") + ":" + object.get("reason"));
            }
        } catch (Exception e) {
            log.error("发送短信失败：{}", e.getMessage());
        }
    }

    public static void main(String[] args) {
        send(SendTemplate.REGISTER,"13678143097","123456");
    }
}
